﻿using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using ECGadmin.Common;

namespace ECGadmin.DAL
{
    public partial class GiftDb
    {
        /// <summary>
        /// Lấy về danh sách các quà tặng và phân trang
        /// </summary>
        /// <param name="page"></param>
        /// <param name="itemsPerPage"></param>
        /// <param name="totalPage"></param>
        /// <param name="totalRecord"></param>
        /// <returns></returns>
        public static List<ViewGiftPagingDto> GetAllGift(int page, int itemsPerPage, ref int totalPage, ref int totalRecord)
        {
            var dao = SharedSqlDao;
            var command = dao.GetDbSprocCommand("WSPX_Gift_GetAllPaging");
            try
            {
                command.Parameters.Add(dao.CreateParameter("@Page", page));
                command.Parameters.Add(dao.CreateParameter("@ItemsPerPage", itemsPerPage));

                var itemTotalPage = command.Parameters.Add("@TotalPage", SqlDbType.Int);
                itemTotalPage.Direction = ParameterDirection.Output;

                var itemTotalRecord = command.Parameters.Add("@TotalRecord", SqlDbType.Int);
                itemTotalRecord.Direction = ParameterDirection.Output;

                var result = dao.GetDTOList<ViewGiftPagingDto>(ref command);
                totalPage = int.Parse(itemTotalPage.Value.ToString() == "" ? "0" : itemTotalPage.Value.ToString());
                totalRecord = int.Parse(itemTotalRecord.Value.ToString() == "" ? "0" : itemTotalRecord.Value.ToString());
                return result;
            }
            finally
            {
                command.Connection.Close();
            }
        }

        /// <summary>
        /// Thêm chiến dịch quà tặng
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public static int AddGift(GiftDto model)
        {
            var dao = SharedSqlDao;
            SqlCommand command = dao.GetDbSprocCommand("WSPX_Gift_Add");
            try
            {
                command.Parameters.Add(dao.CreateParameter("@Name", model.Name));
                command.Parameters.Add(dao.CreateParameter("@GiftTypeId", model.GiftTypeId));
                command.Parameters.Add(dao.CreateParameter("@RequiresCouponCode", model.RequiresCouponCode));
                command.Parameters.Add(dao.CreateParameter("@CouponCode", model.CouponCode));
                command.Parameters.Add(dao.CreateParameter("@Description", model.Description));
                command.Parameters.Add(dao.CreateParameter("@GiftLimitationId", model.GiftLimitationId));
                command.Parameters.Add(dao.CreateParameter("@LimitationTimes", model.LimitationTimes));
                command.Parameters.Add(dao.CreateParameter("@StartDate", model.StartDate));
                command.Parameters.Add(dao.CreateParameter("@EndDate", model.EndDate));
                command.Parameters.Add(dao.CreateParameter("@CreatedDate", model.CreatedDate));
                var result = (int)command.ExecuteScalar();
                return result;
            }
            finally
            {
                command.Connection.Close();
            }
        }//End method

        /// <summary>
        /// Cập nhật thông tin chiến dịch quà tặng
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public static int UpdateGift(GiftDto model)
        {
            var dao = SharedSqlDao;
            SqlCommand command = dao.GetDbSprocCommand("WSPX_Gift_Update");
            try
            {
                command.Parameters.Add(dao.CreateParameter("@GiftId", model.GiftId));
                command.Parameters.Add(dao.CreateParameter("@Name", model.Name));
                command.Parameters.Add(dao.CreateParameter("@GiftTypeId", model.GiftTypeId));
                command.Parameters.Add(dao.CreateParameter("@RequiresCouponCode", model.RequiresCouponCode));
                command.Parameters.Add(dao.CreateParameter("@CouponCode", model.CouponCode));
                command.Parameters.Add(dao.CreateParameter("@Description", model.Description));
                command.Parameters.Add(dao.CreateParameter("@GiftLimitationId", model.GiftLimitationId));
                command.Parameters.Add(dao.CreateParameter("@LimitationTimes", model.LimitationTimes));
                command.Parameters.Add(dao.CreateParameter("@StartDate", model.StartDate));
                command.Parameters.Add(dao.CreateParameter("@EndDate", model.EndDate));
                command.Parameters.Add(dao.CreateParameter("@CreatedDate", model.CreatedDate));
                var result = command.ExecuteNonQuery();
                return result;
            }
            finally
            {
                command.Connection.Close();
            }
        }

        /// <summary>
        /// Thêm danh sách sản phẩm nào là quà tặng vào bảng GiftProduct
        /// </summary>
        /// <param name="giftId"></param>
        /// <param name="giftProductIdList"></param>
        /// <returns></returns>
        public static int AddProductIsGift(int giftId, string giftProductIdList)
        {
            var dao = SharedSqlDao;
            var command = dao.GetDbSprocCommand("WSPX_GiftProduct_Add");
            try
            {
                command.Parameters.Add(dao.CreateParameter("@GiftId", giftId));
                command.Parameters.Add(dao.CreateParameter("@GiftProductIdList", giftProductIdList));
                var result = command.ExecuteNonQuery();
                return result;
            }
            finally
            {
                command.Connection.Close();    
            }
        }

        /// <summary>
        /// Lấy về danh sách sản phẩm là quà tặng theo GiftId
        /// </summary>
        /// <param name="giftId"></param>
        /// <returns></returns>
        public static List<GiftProductDto> GetProductIsGift(int giftId)
        {
            var dao = SharedSqlDao;
            var command = dao.GetDbSprocCommand("WSPX_GiftProduct_GetByGiftId");
            try
            {
                command.Parameters.Add(dao.CreateParameter("@GiftId", giftId));
                var result = dao.GetDTOList<GiftProductDto>(ref command);
                return result;
            }
            finally
            {
                command.Connection.Close();
            }
        }

        /// <summary>
        /// Xóa những sản phẩm dự định làm quà tặng trong bảng GiftProduct theo GiftId
        /// </summary>
        /// <param name="giftId"></param>
        /// <returns></returns>
        public static int DeleteGiftProductByGiftId(int giftId)
        {
            var dao = SharedSqlDao;
            var command = dao.GetDbSprocCommand("WSPX_Gift_Delete");
            try
            {
                command.Parameters.Add(dao.CreateParameter("@GiftId", giftId));
                var result = command.ExecuteNonQuery();
                return result;
            }
            finally
            {
                command.Connection.Close();
            }
        }

        /// <summary>
        /// Lấy về danh sách các chiến dịch quà tặng đang hoạt động, áp dụng tới sản phẩm
        /// </summary>
        /// <returns></returns>
        public static List<GiftDto> GetGiftApplyProduct()
        {
            var dao = SharedSqlDao;
            var command = dao.GetDbSprocCommand("WSPX_Gift_GetGiftApplyProduct");
            try
            {
                return dao.GetDTOList<GiftDto>(ref command);
            }
            finally
            {
                command.Connection.Close();
            }
        }

        /// <summary>
        /// Lấy GiftId theo ProductId
        /// </summary>
        /// <param name="productId"></param>
        /// <returns></returns>
        public static int GetGiftIdByProductId(string productId)
        {
            var dao = SharedSqlDao;
            var command = dao.GetDbSprocCommand("WSPX_GiftApplyToProduct_GetGiftIdByProductId");
            try
            {
                command.Parameters.Add(dao.CreateParameter("@ProductId", productId));
                return dao.GetSingleInt32(command);
            }
            finally
            {
                command.Connection.Close();
            }
        }

        /// <summary>
        /// Lấy về chiến dịch quà tặng theo danh mục
        /// </summary>
        /// <param name="categoryId"></param>
        /// <returns></returns>
        public static int GetGiftIdByCategoryId(string categoryId)
        {
            var dao = SharedSqlDao;
            var command = dao.GetDbSprocCommand("WSPX_GiftApplyToProduct_GetGiftIdByCategoryId");
            try
            {
                command.Parameters.Add(dao.CreateParameter("@CategoryId", categoryId));
                return dao.GetSingleInt32(command);
            }
            finally
            {
                command.Connection.Close();
            }
        }

        /// <summary>
        /// Xóa chiến dịch quà tặng áp dụng cho sản phẩm từ bảng GiftApplyToProduct
        /// </summary>
        /// <param name="productId"></param>
        /// <returns></returns>
        public static int DeleteGiftApplyToProduct(string productId)
        {
            var dao = SharedSqlDao;
            var command = dao.GetDbSprocCommand("WSPX_GiftApplyToProduct_DeleteByProductId");
            try
            {
                command.Parameters.Add(dao.CreateParameter("@ProductId", productId));
                var result = command.ExecuteNonQuery();
                return result;
            }
            finally
            {
                command.Connection.Close();
            }
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="categoryId"></param>
        /// <returns></returns>
        public static int DeleteGiftApplyToCategory(string categoryId)
        {
            var dao = SharedSqlDao;
            var command = dao.GetDbSprocCommand("WSPX_GiftApplyToCategory_DeleteByCategoryId");
            try
            {
                command.Parameters.Add(dao.CreateParameter("@categoryId", categoryId));
                var result = command.ExecuteNonQuery();
                return result;
            }
            finally
            {
                command.Connection.Close();
            }
        }

        /// <summary>
        /// Lấy về danh sách chiến dịch quà tặng áp dụng cho danh mục
        /// </summary>
        /// <returns></returns>
        public static List<GiftDto> GetGiftApplyCategory()
        {
            var dao = SharedSqlDao;
            var command = dao.GetDbSprocCommand("WSPX_Gift_GetGiftApplyCategory");
            try
            {
                return dao.GetDTOList<GiftDto>(ref command);
            }
            finally
            {
                command.Connection.Close();
            }
        }
    }
}
